Il paradigma funzionale sposta il modello mentale dello sviluppatore da "aggiornare una scatola con stato" a applicare trasformazioni matematiche a valori immutabili. In Elixir, i dati non vengono mai modificati; vengono semplicemente rigenerati in nuove forme.
1. L'affermazione matematica
Quando scrivi $x = a + 1$, non stai assegnando un risultato a una variabile. Invece, stai semplicemente affermando che le espressioni $x$ e $a + 1$ hanno lo stesso valore. Questo riflette la logica algebrica in cui $x$ rappresenta un valore fisso in un contesto specifico.
2. Immutabilità come garanzia
In Elixir, tutti i valori sono immutabili. I dati non possono essere modificati una volta creati. Questo elimina gli "effetti collaterali" in cui una funzione potrebbe modificare inaspettatamente una variabile globale o un oggetto passato, garantendo che il codice sia prevedibile e sicuro per il threading.
3. Trasformazione vs. Mutazione
Non modifichiamo mai i dati sul posto. Elixir non ha l'assegnazione; invece, cerca di corrispondere i valori ai pattern. Per "modificare" un valore, passiamo i dati originali attraverso una funzione per produrre una versione completamente nuova.
"elixir"
iex> cap_name = String.capitalize name
"Elixir"
iex> name
"elixir" (Ancora intatto!)